La teoria degli ordini è un ramo della matematica, e in particolare dell'algebra, che studia le relazioni d'ordine tra elementi di un insieme. Un ordine è una relazione binaria che mette in relazione coppie di elementi secondo criteri di confronto, come "minore o uguale" nei numeri o "essere contenuto in" tra insiemi. Quando tale relazione è riflessiva, antisimmetrica e transitiva, si parla di ordine parziale; se invece ogni coppia di elementi è confrontabile, si ha un ordine totale. La teoria degli ordini fornisce strumenti per analizzare strutture come insiemi ordinati, reticoli e gerarchie, ed è fondamentale in ambiti che vanno dalla logica matematica all'informatica teorica.
In particolare, è il fondamento della semantica denotazionale dei linguaggi di programmazione: come vedremo, le definizioni ricorsive (di funzioni, di tipi di dato, di insiemi definiti per induzione) trovano il loro significato come punti fissi di opportune funzioni su domini ordinati. Tutto il percorso che segue, dai poset alle CPO, fino al Teorema di Kleene, serve esattamente a dare un senso preciso e calcolabile all'idea di "soluzione di un'equazione ricorsiva".
Un poset (dall'inglese partially ordered set, "insieme parzialmente ordinato") è una coppia formata da un insieme e da una relazione di ordine parziale definita su di esso.
La relazione deve essere:
- riflessiva, per ogni , ;
- antisimmetrica, se e , allora ;
- transitiva, se e , allora .
Scriviamo per dire che e sono confrontabili e che è minore o uguale a . Con intendiamo invece la parte stretta della relazione, ovvero .
A differenza degli insiemi totalmente ordinati, in un poset non tutte le coppie di elementi devono essere confrontabili: può accadere che esistano elementi e per cui né né sono veri. In tal caso si dice che e sono inconfrontabili.
I poset possono essere rappresentati graficamente tramite diagrammi di Hasse, che omettono gli archi resi impliciti dalla riflessività (i cappi su ogni nodo) e dalla transitività (gli archi "scorciatoia"), mostrando solo le relazioni di copertura immediate. Per convenzione, se allora è disegnato più in basso di .
Alcune famiglie particolari di poset meritano un nome proprio.
Gli ordini totali sono poset in cui ogni elemento è confrontabile con qualsiasi altro elemento dell'insieme:
Il loro diagramma di Hasse è una semplice catena verticale.
Gli ordini discreti sono poset in cui ogni elemento è confrontabile esclusivamente con sé stesso:
Il diagramma di Hasse è una "polvere" di punti isolati, senza alcun arco.
I flat order (ordini "piatti") sono poset in cui ciascun elemento è confrontabile con sé stesso e con un singolo elemento, minore di tutti gli altri, detto bottom e indicato col simbolo :
Il diagramma di Hasse è un "ventaglio" di punti tutti collegati direttamente a un unico elemento inferiore . Gli ordini piatti sono il modo standard per trasformare un insieme "non ordinato" in un dominio: si aggiunge un elemento che rappresenta il valore indefinito (il calcolo che non termina), ottenendo .
Domanda per il lettore. è un poset? È totale, discreto, piatto? E ? E ancora e ? Indizio: provate a rappresentare ciascuna relazione con il suo diagramma di Hasse, e ricordate che l'ordine deve essere riflessivo.
Un altro esempio fondamentale è l'insieme delle parti di un insieme : è un poset (l'inclusione è riflessiva, antisimmetrica e transitiva), ma non è totale appena , perché ad esempio e sono inconfrontabili.
Gli ordini si comportano bene rispetto alle due operazioni più naturali: restringere l'insieme e invertire la relazione.
Teorema (sottoinsieme di un poset). Sia un poset e . Posto , la coppia è ancora un poset. Inoltre, se è totale, allora anche lo è.
In altre parole: qualsiasi sottoinsieme di un ordine totale è un ordine totale. La dimostrazione è immediata, dato che riflessività, antisimmetria, transitività e totalità sono proprietà universali, e quindi "ereditate" da ogni sottoinsieme.
Teorema (ordine inverso). Se è un poset, allora lo è anche , dove è la relazione inversa. La verifica è immediata: riflessività, antisimmetria e transitività sono simmetriche rispetto all'inversione. Questo principio di dualità è prezioso: ogni nozione che introdurremo "verso il basso" (elemento minimo, bottom, minorante) ha una nozione duale "verso l'alto" (elemento massimo, top, maggiorante) che si ottiene gratuitamente leggendo le definizioni nell'ordine inverso.
È istruttivo confrontare gli ordini parziali con le relazioni ben fondate , quelle su cui si fonda il principio di induzione ben fondata. Sono oggetti per molti versi opposti.
Un poset è:
- riflessivo;
- antisimmetrico;
- transitivo;
- può ammettere catene discendenti infinite (si pensi a , dove ).
Una relazione ben fondata è invece:
- non riflessiva, teorema importantissimo: se lo fosse, darebbe immediatamente un ciclo, e quindi una catena discendente infinita, contraddicendo la ben fondatezza;
- antisimmetrica, ma in modo vacuo: è sempre falso (origina un ciclo);
- per essa esiste la chiusura transitiva , anch'essa ben fondata;
- non ammette alcuna catena discendente infinita, è esattamente questa la proprietà che la definisce.
Il legame tra i due mondi è il seguente: la chiusura riflessiva e transitiva di una relazione ben fondata è sempre un poset, e viceversa la parte stretta di un poset può, in casi favorevoli (ad esempio i poset in cui non esistono catene discendenti infinite), essere ben fondata.
Fissato un poset e un sottoinsieme , possiamo individuare alcuni elementi che giocano un ruolo speciale. Le definizioni vanno lette con cura, perché differenze apparentemente minime (minimo vs minimale) hanno conseguenze importanti.
Un elemento è il minimo (least element) di se è minore o uguale di ogni elemento di :
Si noti la richiesta forte: deve essere confrontabile con tutti gli elementi di , e stare sotto a ciascuno.
Teorema (unicità del minimo). Se e sono entrambi minimi di , allora .
Dimostrazione. Poiché è minimo, . Poiché è minimo, . Per antisimmetria, .
Quando esiste, il minimo dell'intero insieme prende il nome di bottom e si indica con (talvolta per disambiguare). Per esempio, in il bottom è ; in il bottom è .
Un elemento è minimale se nessun elemento di sta strettamente sotto di esso:
Intuitivamente, sotto a non si trova nulla di confrontabile, ma potrebbero esistere elementi inconfrontabili con .
Nel poset , ad esempio, i singoletti sono tutti minimali, ma nessuno è il minimo (sono inconfrontabili tra loro). Se invece aggiungiamo , allora diventa l'unico minimale e contemporaneamente il minimo.
Tutte le nozioni precedenti hanno un duale, ottenuto leggendole nell'ordine inverso :
- l'elemento massimo (greatest element) di è il minimo di rispetto a , cioè un elemento maggiore o uguale di tutti gli altri;
- il top è il massimo dell'intero (se esiste);
- un elemento massimale è un minimale rispetto a , cioè un elemento sopra al quale non c'è nulla di strettamente più grande e confrontabile.
In il top è stesso; in il top è .
Le nozioni di minimo/massimo richiedono che l'elemento speciale appartenga a . Spesso però vogliamo "rappresentare dall'alto" con un elemento che può stare anche fuori da : nasce così la nozione di maggiorante.
Un elemento è un maggiorante (upper bound) di se tutti gli elementi di gli stanno sotto:
Si noti che non deve necessariamente appartenere a , e che può avere molti maggioranti (o anche nessuno).
Tra tutti i maggioranti, quello più informativo è il più piccolo. Un elemento è il minimo dei maggioranti o estremo superiore (least upper bound, lub) di se:
1. è un maggiorante di : ;
2. è minore o uguale di ogni altro maggiorante: .
Scriviamo . Intuitivamente, il lub è il più piccolo elemento che "rappresenta tutto dall'alto". Come per il minimo, quando esiste il lub è unico (stessa dimostrazione per antisimmetria). Attenzione: il lub, se esiste, non appartiene necessariamente a .
Esempi.
- In , un sottoinsieme finito ha lub ; un sottoinsieme infinito non ha lub (l'insieme dei maggioranti è vuoto).
- In , ogni famiglia ha lub, ed è l'unione: . Per esempio .
- Esistono poset in cui un insieme ha maggioranti ma nessun lub, perché tra i maggioranti non ce n'è uno minimo (due maggioranti inconfrontabili e "minimali" tra i maggioranti).
Per dualità si definisce il massimo dei minoranti o estremo inferiore (greatest lower bound, glb o meet), indicato con . Un poset in cui ogni sottoinsieme ammette sia lub sia glb è un reticolo completo.
Per la semantica dei linguaggi non ci interessa tanto il lub di un insieme arbitrario, quanto il lub di una particolare famiglia ordinata: la catena. L'idea guida è quella di approssimazione.
> L'idea di completezza. Pensiamo a come a un dominio di significati e leggiamo come " è un'approssimazione (meno precisa) di ": e sono consistenti, ma è più accurato. Una computazione produce allora una successione crescente di approssimazioni
>
> e la domanda naturale è: questa successione di approssimazioni tende a un limite? La completezza è esattamente la garanzia che la risposta sia sempre sì.
Una catena in un poset è una successione tale che
Per convenzione una catena è sempre una lista infinita di elementi (non necessariamente distinti). Una catena si dice finita se contiene solo un numero finito di elementi distinti, cioè se da un certo punto in poi diventa costante:
Il limite di una catena è il suo estremo superiore, quando esiste, e lo indichiamo con
Esempio. In la catena non ha limite (nessun maggiorante), mentre è finita e ha limite .
Due lemmi semplici ma fondamentali rendono i limiti maneggevoli.
Lemma (catene finite). In ogni poset, ogni catena finita ha limite, ed è il suo ultimo (massimo) elemento.
Dimostrazione. Se la catena è definitivamente costante a , allora è il massimo della catena (gli elementi sono totalmente ordinati tra loro), quindi ne è un maggiorante; ed è il minimo dei maggioranti, perché ogni maggiorante soddisfa .
Lemma (indipendenza dal prefisso). Se la catena ha limite, allora per ogni anche la catena "spostata" ha lo stesso limite:
Dimostrazione. Basta mostrare che le due catene hanno gli stessi maggioranti (e quindi lo stesso minimo dei maggioranti). Ogni maggiorante di è maggiorante di , perché quest'ultima è un sottoinsieme della prima. Viceversa, se è maggiorante di e , allora , quindi maggiora anche i primi termini.
Il secondo lemma formalizza un'intuizione importante: il limite di una computazione dipende solo dal suo comportamento "a lungo termine", non da quanto fatto in un numero finito di passi iniziali.
Un poset è detto completo (complete partial order, CPO) se ogni catena in esso ha un limite (least upper bound).
Un semplice esempio è , dotato di un elemento top, per l'appunto : l'insieme dei numeri dispari ha lub , l'insieme dei numeri pari ha lub , e ogni catena infinita ha limite .
Dal lemma sulle catene finite discende una serie di condizioni sufficienti molto comode:
- ogni catena finita ha limite (è il suo ultimo elemento);
- se ammette solo catene finite, allora è completo;
- ogni poset finito è completo;
- ogni ordine discreto è completo (le uniche catene sono costanti);
- ogni flat order è completo (le uniche catene sono costanti o ).
Controesempio. non è completo: la catena non ha limite. Per esibire la non completezza basta sempre una singola catena senza limite. Analogamente, con due elementi massimali inconfrontabili non è completo: una catena infinita ha come maggioranti sia sia , ma questi sono inconfrontabili, quindi non esiste il minimo dei maggioranti.
Una CPO con bottom, scritta CPO, è una CPO che possiede anche l'elemento minimo . Il bottom rappresenta l'approssimazione "vuota", il punto di partenza di ogni computazione: l'informazione nulla, da cui ogni successione di approssimazioni prende le mosse. Come vedremo, la presenza di è ciò che garantisce l'esistenza dei punti fissi (Teorema di Kleene).
Esempi importanti di domini.
- Insieme delle parti. è una CPO con bottom . Il limite di una catena di insiemi è la loro unione: .
- Numeri naturali estesi. è una CPO con bottom e top .
- Ordini piatti. Per ogni insieme , il dominio piatto è una CPO. È il modo canonico di interpretare un tipo di dato "con possibilità di non terminazione".
L'esempio cardine per la semantica è il dominio delle funzioni parziali. Scriviamo (oppure ) per una funzione che può essere indefinita su alcuni ingressi. Vista come relazione, una funzione parziale è l'insieme delle coppie in cui è definita:
Sull'insieme delle funzioni parziali da a definiamo l'ordine
dove significa " è definita su ". A parole: raffina , cioè è definita ovunque lo è e vi assume lo stesso valore (ma può essere definita anche dove non lo è). Vista la rappresentazione insiemistica, questo equivale semplicemente all'inclusione .
Si verifica facilmente che è una CPO:
- il bottom è la relazione vuota, cioè la funzione ovunque indefinita;
- è completa, perché il limite di una catena è , che è ancora una funzione (la proprietà funzionale si conserva: se e stanno nell'unione, esistono indici in cui compaiono, e in , funzione, vale ).
Un'osservazione tanto semplice quanto profonda: il limite di una catena di funzioni parziali può essere una funzione totale. È proprio così che approssimazioni finite "convergono" a una funzione completa, per esempio, la successione
ha come limite la funzione fattoriale, totale.
Le funzioni totali si ottengono come caso particolare: , dove ha l'ordine piatto, e l'ordine punto a punto rende anche questo un dominio completo, con limite calcolato punto a punto.
Una volta stabilito cosa sono i domini, dobbiamo capire quali funzioni tra di essi "rispettano la struttura". Ne servono due livelli: la monotonia e la continuità.
Date due CPO e , una funzione è monotona se preserva l'ordine:
Monotona = preserva l'ordine. L'intuizione è che più informazione in ingresso non può che dare più informazione in uscita: raffinando l'argomento, il risultato si raffina (o resta invariato). Una conseguenza immediata e indispensabile è che una funzione monotona manda catene in catene: se è una catena in , allora è una catena in .
Teorema (composizione). La composizione di funzioni monotone è monotona. Se e sono monotone, lo è anche .
La monotonia non basta: vogliamo che la funzione "commuti con il passaggio al limite". Date due CPO ed , una funzione monotona è continua se preserva i limiti delle catene:
Continua = preserva i limiti. Si noti che, grazie alla monotonia, una delle due disuguaglianze è gratuita: vale sempre. La continuità chiede in più la disuguaglianza opposta, cioè che non "salti" al limite, introducendo informazione non prevista da nessuna approssimazione finita.
Quando monotonia e continuità coincidono.
Lemma. Se è una CPO senza catene infinite (ad esempio finita, o discreta, o piatta) ed è una CPO, allora ogni funzione monotona è automaticamente continua.
Dimostrazione. Ogni catena è finita, quindi definitivamente costante a ; per monotonia è anch'essa definitivamente costante a , da cui .
La distinzione diventa quindi interessante solo in presenza di catene infinite. Su , ad esempio, la funzione
è monotona ma non continua: presa la catena con limite , si ha , mentre . La funzione "vede" il limite ma nessuna delle approssimazioni finite lo annuncia.
Teorema (composizione). La composizione di funzioni continue è continua.
Arriviamo al cuore del discorso. Una definizione ricorsiva ha la forma
una "equazione" in cui l'oggetto cercato compare a entrambi i membri. Esempi: la definizione di una funzione che richiama sé stessa, di un processo che si riavvia, di un insieme chiuso rispetto a certe regole. Le domande sono due: esiste un tale ? Esiste il più piccolo? La teoria dei punti fissi risponde a entrambe.
Sia una funzione su una CPO. Diciamo che:
- è un punto fisso (fixpoint) di se ;
- è un pre-punto fisso (pre-fixpoint) di se .
Ovviamente ogni punto fisso è anche un pre-punto fisso. L'idea di Kleene è di costruire il punto fisso iterando a partire dal nulla, cioè da . Definiamo la potenza per applicazione ripetuta:
Lemma (la catena di Kleene). Se è una CPO e è monotona, allora è una catena.
Dimostrazione. Per induzione su proviamo . Caso base: , perché è il minimo. Passo induttivo: se , applicando (monotona) otteniamo .
Poiché è completa, questa catena ha un limite, ed è il candidato punto fisso.
Teorema (del punto fisso di Kleene). Sia una CPO e una funzione continua. Posto
valgono:
1. è un punto fisso di , cioè ;
2. è il minimo pre-punto fisso di : per ogni , se allora . In particolare è il minimo punto fisso.
Dimostrazione del punto 1. Sfruttando la continuità e l'indipendenza dal prefisso:
Dimostrazione del punto 2. Sia un pre-punto fisso, . Proviamo per induzione che per ogni : il caso base è ; il passo induttivo usa monotonia e l'ipotesi per ottenere . Dunque è un maggiorante della catena di Kleene, e poiché ne è il minimo maggiorante, .
Il teorema è il motore della semantica denotazionale: dà esistenza, unicità del minimo e, soprattutto, un metodo costruttivo per calcolare il significato di una definizione ricorsiva, iterando a partire da .
Lavoriamo nelle CPO già viste, controllando ogni volta monotonia e continuità.
- su , con . Si ha , : punto fisso raggiunto subito, .
- su , con . Qui La catena ha limite : il punto fisso si raggiunge "all'infinito".
- su . , , : punto fisso .
- Attenzione alla non monotonia. su non è monotona (più grande è , più piccolo è ): , , , … non è nemmeno una catena, e Kleene non si applica.
Un esempio celebre e meno banale è la funzione 91 di McCarthy, vista come trasformazione sul dominio :
Iterando a partire da (la funzione ovunque indefinita) la catena cresce dapprima sui valori , poi "scende" colmando progressivamente gli ingressi minori, fino a raggiungere un punto fisso che è una funzione totale: vale per e costantemente per .
Concludiamo con l'applicazione che chiude il cerchio tra teoria degli ordini, logica e induzione: i sistemi di regole di inferenza. Una definizione induttiva (l'insieme dei numeri pari, le stringhe ben parentesizzate, la relazione di transizione di un linguaggio…) è data da un insieme di regole del tipo
con premesse e una conclusione (gli assiomi sono le regole con ). La domanda è: qual è l'insieme dei teoremi generati da ? La teoria dei punti fissi dà una risposta precisa.
Sia l'insieme di tutte le formule; allora è una CPO. L'operatore delle conseguenze immediate (Immediate Consequences Operator, ICO) associato a è la funzione definita da
A parole: è l'insieme di tutte le conclusioni ottenibili applicando le regole un solo passo a partire dalle ipotesi già presenti in .
L'operatore gode delle proprietà giuste:
- è monotono. Se e , la regola che produce ha premesse in , quindi .
- è continuo, a patto che ogni regola abbia un numero finito di premesse. Questa ipotesi di finitezza è esattamente ciò che serve: data una catena e una conclusione ottenibile da , le sue (finite) premesse compaiono tutte già in qualche con , quindi .
Definiamo ora l'insieme dei teoremi "per livelli": e (i teoremi dimostrabili con una derivazione alta al più ). Si dimostra per induzione che , e quindi l'insieme di tutti i teoremi è
Teorema. Se ogni regola ha un numero finito di premesse, l'insieme dei teoremi di è il minimo punto fisso dell'operatore delle conseguenze immediate:
Dimostrazione. Per il Teorema di Kleene (applicabile perché è continuo su una CPO), .
Questo risultato è la giustificazione formale del principio di induzione sulle regole: l'insieme definito induttivamente è il più piccolo insieme chiuso rispetto alle regole, ovvero il minimo punto fisso di .
Esempio (stringhe ben parentesizzate). Sull'alfabeto definiamo il linguaggio con le regole
Iterando l'ICO da si ottiene:
e il limite di questa catena è esattamente , l'insieme di tutte e sole le stringhe ben parentesizzate.
1. I poset danno una nozione di confronto e di approssimazione tra elementi.
2. Catene, maggioranti e lub formalizzano l'idea di limite di una successione di approssimazioni.
3. Le CPO garantiscono che ogni catena converga e forniscono un punto di partenza .
4. Le funzioni monotone e continue sono quelle che rispettano questa struttura.
5. Il Teorema di Kleene assicura che ogni funzione continua su una CPO abbia un minimo punto fisso, calcolabile iterando da .
6. L'ICO mostra che gli insiemi definiti induttivamente sono minimi punti fissi, unificando teoria degli ordini, logica e induzione.
Questa stessa macchina ricompare altrove: la bisimilarità tra processi, ad esempio, si definisce proprio come punto fisso (in quel caso massimo, su una CPO costruita ad hoc) di un funzionale continuo, applicando ancora una volta il Teorema di Kleene.